package com.itany.corejava.code06_数组;

import java.util.Arrays;

/**
 * @author: 石小俊
 * @date: 2023年03月06日 10:09
 * @version: 1.0
 */
public class Test05_值传递与引用传递 {
    public static void main(String[] args) {
        // 值传递
        // 在栈中开辟了一块空间i,存储的值为1
        int i = 1;
        // 在栈中开辟了一块空间i2,将i的值传递过来
        int i2 = i;
        // 此时的i与i2各自有一块属于自己的空间
        // 修改i2的值相当于改变了i2所属空间的值
        // 此时对于i没有影响
        i2 = 2;
        System.out.println("i:"+i);
        System.out.println("i2:"+i2);

        // 引用传递
        // 在堆中开辟一块空间,用于存放具体的值
        // 在栈中开辟了一块空间,用于存放堆的引用
        int[] arr = {1,3,5};
        // 在栈中开辟了一块空间用于存放堆的引用
        // 将arr的引用地址的值传递给arr2
        // 此时的arr与arr2均指向了同一块堆中的区域
        int[] arr2 = arr;
        // 当arr2发生改变,实际上改变的是堆中的值
        // arr指向的也是该堆中的区域
        // 因此,arr会随着arr2的改变而改变
        arr2[0] = 10;
        System.out.println("arr:"+ Arrays.toString(arr));
        System.out.println("arr2:"+Arrays.toString(arr2));
    }
}
